#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <unistd.h>
/*
    int sem_init(sem_t *sem, int pshared, unsigned int value):
        初始化一个无名信号量
        参数1：无名信号
        参数2：0-进程内部共享 1-进程间共享
        参数3：无名信号量的初始值
    int sem_wait(sem_t *sem)：
        P操作，死等
    int sem_post(sem_t *sem)：
        V操作
    int sem_destroy(sem_t *sem):
        销毁锁
*/
int data = 0;//共享资源
sem_t sem;//无名信号

void* data_handler(void* arg)
{
    pthread_detach(pthread_self());//设置分离属性
    int i = 100000;
    while (i--)
    {
        sem_wait(&sem);//P等到拿到锁
        data++;//原子性
        printf("thread data:%d\n", data);
        sem_post(&sem);//V用完开锁
    }
}

int main()
{
    //1.创建一个信号量
    int r = sem_init(&sem, 0, 1);//1个资源
    if (r == -1)
    {
        perror("sem_init error");
        return -1;
    }

    //2.创建一个线程
    pthread_t tid;
    pthread_create(&tid, NULL, data_handler, NULL);
    int i = 100000;
    while (i--)
    {
        sem_wait(&sem);//P
        data++;
        printf("main data:%d\n", data);
        sem_post(&sem);//V
    }

    sem_destroy(&sem);
    while (1);

    return 0;
}